import java.util.Scanner;

public class Chihuo2 {
    public static void main(String[] args) {
        //定义数据主体，菜品
        String[] dishNames = {"红烧带鱼", "鱼香肉丝", "时令鲜蔬"};//定义菜品名称
        double[] prices = {38.0, 20.0, 10.0};//定义菜品单价
        int[] praiseNums = new int[3];//定义点赞数
        //定义定义数据主体，订餐人，餐品信息，送餐时间，送餐地址，总金额，订单状态
        String[] names = new String[4];//订餐人姓名
        String[] dishMsg = new String[4];//菜品名称+份数
        int[] times = new int[4];//送餐时间
        String[] adresses = new String[4];//送餐地址
        double[] sumPrices = new double[4];//订单总金额
        int[] states = new int[4];//0:代表已预订，1：代表已完成
        //初始化两个订单
        names[0] = "汤舒青";
        dishMsg[0] = "红烧带鱼 2份";
        times[0] = 10;
        adresses[0] = "新蚌埠路1098号";
        sumPrices[0] = 76;//餐费满50免配送费，不然配送费6元
        states[0] = 0;

        names[1] = "刘子梅";
        dishMsg[1] = "鱼香肉丝 1份";
        times[1] = 13;
        adresses[1] = "天水路107号";
        sumPrices[1] = 26;//餐费满50免配送费，不然配送费6元
        states[1] = 1;

        //搭建项目主体、
        Scanner input = new Scanner(System.in);
        int num = -1;//用户输入0返回时的输入数字。num=0重复显示主菜单，num在用户每次订餐操作后进行提示重新赋值
        System.out.println("欢迎使用\"吃货联盟订餐系统\"");
        System.out.println("****************");
        //记录用户是否退出系统的状态：退出true 不退出false;
        boolean flag = false;
        do {
            System.out.println("1.我要订餐");
            System.out.println("2.查看餐袋");
            System.out.println("3.签收订单");
            System.out.println("4.删除订单");
            System.out.println("5.我要点赞");
            System.out.println("6.退出系统");
            System.out.println("************");
            System.out.print("请选择：");
            int choose = input.nextInt();
            switch (choose) {
                case 1:
                    System.out.println("我要订餐");
                    //订餐前提是订单未满,boolean变量来表示订单是否满了，满了false-不能订餐，反之能订餐
                    boolean isAdd=false;
                    for (int i=0;i<names.length;i++){
                        if (names[i]==null){
                            isAdd=true;
                            //订餐
                            System.out.print("请输入订餐人的姓名");
                            String name=input.next();
                            //循环输出菜品信息
                            System.out.println("序号\t菜名\t单价");
                            for (int j=0;j<dishNames.length;j++){
                                String praise=(praiseNums[j]==0)?"":praiseNums[j]+"赞";
                                System.out.println((j+1)+"\t"+dishNames[j]+"\t"+prices[j]+praise);
                            }
                            //菜品编号输入及判断
                            System.out.println("请输入您要点的菜品编号：");
                            int no=input.nextInt();
                            while(no<1||no>3){
                                System.out.println("本店没有这个菜品，请重新选择：");
                                no=input.nextInt();
                            }
                            //点菜份数
                            System.out.println("请输入您要点的份数：");
                            int number=input.nextInt();
                            System.out.println("请输入送餐时间（时间只能在10-20点之间的整点）：");
                            int time=input.nextInt();
                            //送餐时间的输入和判断
                            while (time>20||time<10){
                                System.out.println("您输入的时间有误，请输入10-20点之间的整点");
                                time=input.nextInt();
                            }
                            //送餐地址
                            System.out.print("请输入送餐地址：");
                            String adress=input.next();
                            //输出订餐信息给用户看，并且把订餐信息添加到订单信息
                            System.out.println("订餐成功");
                            //菜品信息：菜名名称 份数
                            String dishInfo=dishNames[no-1]+" "+number+"份";//用户输入的no比真正的下标多一
                            System.out.println("您的订单数"+dishInfo);
                            System.out.println("您的配送时间为"+time+"点");
                            //餐费 配送费 总计
                            //餐费 prices数组下标比用户输入数字少一
                            double disprice=prices[no-1]*number;
                            double peisong=(disprice>50)?0:6;
                            double sumPrice=disprice+peisong;
                            System.out.print("餐费"+disprice+"元"+"配送费"+peisong+"元"+":总计:"+sumPrice+"元");
                            //把订餐信息添加到订单信息，插入订单的位置是关键
                            names[i]=name;
                            dishMsg[i]=dishInfo;
                            times[i]=time;
                            adresses[i]=adress;
                            sumPrices[i]=sumPrice;
                            //本次订餐结束，退出循环
                            break;

                          /*  String[] names = new String[4];//订餐人姓名
                            String[] dishMsg = new String[4];//菜品名称+份数
                            int[] times = new int[4];//送餐时间
                            String[] adresses = new String[4];//送餐地址
                            double[] sumPrices = new double[4]*/

                        }
                    }if (!isAdd){
                    System.out.println("对不起，您的餐带已满！");
                }
                    break;
                case 2:
                    System.out.println("查看餐袋");
                    System.out.println("序号\t订餐人\t订餐菜名\t配送时间\t配送地址\t订餐金额\t订单状态");
                    for (int i = 0; i < names.length; i++) {
                        if (names[i] != null) {//只输出非空订单
                           String time=times[i]+"点";
                            String state=(states[i]==0)?"已预定":"已送达";
                            System.out.println((i+1)+"\t\t"+names[i] + "\t" + dishMsg[i] + "\t" + time + "\t" + adresses[i] + "\t" + sumPrices[i] + "\t" + state);
                        }

                    }

                    break;
                case 3:
                    System.out.println("签收订单");
                    //签收之前判断订单是否存在，false-不存在，不能签收，true-存在，且预订状态，能签收，存在，完成状态，不能签收
                    boolean isSign=false;
                    System.out.print("请输入您要签收的订单编号：");
                    int signNo=input.nextInt();
                    for (int i=0;i<names.length;i++){
                        if (names[i]!=null&&states[i]==0&&i==signNo-1){
                            //有订单信息，并且订单为已预订，并且用户输入订单能找到
                            isSign=true;
                            states[i]=1;
                        }else if (names[i]!=null&&states[i]==1&&i==signNo-1){
                            isSign=true;
                            System.out.println("您选择的订单已经签收，不能重复签收");
                        }
                    }
                    if (!isSign){
                        System.out.println("");
                    }
                  /* String[] names = new String[4];//订餐人姓名
                    String[] dishMsg = new String[4];//菜品名称+份数
                    int[] times = new int[4];//送餐时间
                    String[] adresses = new String[4];//送餐地址
                    double[] sumPrices = new double[4];//订单总金额
                    int[] states = new int[4];//0:代表已预订，1：代表已完成*/

                    break;
                case 4:
                    System.out.println("删除订单");
                    //删除之前，要判断订单是否存在，bolean
                    //签收之前判断订单是否存在，false-不存在，不能签收，true-存在，且预订状态，能签收，存在，完成状态，不能签收
                    boolean isDelete=false;
                    System.out.print("请输入您要删除的订单编号：");
                    int deleteNo=input.nextInt();
                    for (int i=0;i<names.length;i++){
                        if (names[i]!=null&&states[i]==0&&i==deleteNo-1){
                            //有订单信息，并且订单为已预订，并且用户输入订单能找到
                            isSign=true;
                            System.out.println("您选择的订单未签收，不能删除");
                        }else if (names[i]!=null&&states[i]==1&&i==deleteNo-1){
                            isDelete=true;
                            for (int j=i;j<names.length-1;j++){
                                names[j]=names[j+1];
                                dishMsg[j]=dishMsg[j+1];
                                times[j]=times[j+1];
                                adresses[j]=adresses[j+1];
                                sumPrices[j]=sumPrices[j+1];
                                states[j]=states[j+1];
                            }
                            //最后一个元素置空
                            names[names.length-1]=null;
                            dishMsg[names.length-1]=null;
                            times[names.length-1]=0;
                            adresses[names.length-1]=null;
                            sumPrices[names.length-1]=0;
                            states[names.length-1]=0;
                            System.out.println("删除订单成功");
                            //有订单信息，并且输入编号能找到，但是订单状态为已完成可以删除
                            //找到删除订单的下标i，把i后面的元素依次往前移动，最后一个元素要质控
                            //注意，移动的过程是把一个元素往前一个元素复制的过程
                            //最后一个元素一定要置空，置空后可以下新订单
                        }
                    }
                    if (!isDelete){
                        System.out.println("您选择订单不存在");
                    }
                    break;
                case 5:
                    System.out.println("我要点赞");
                    //显示菜品信息
                    //循环输出菜品信息
                    System.out.println("序号\t菜名\t单价");
                    for (int j=0;j<dishNames.length;j++){
                        String praise=(praiseNums[j]==0)?"":praiseNums[j]+"赞";
                        System.out.println((j+1)+"\t"+dishNames[j]+"\t"+prices[j]+praise);
                    }
                    //点赞
                    System.out.print("请输入您要点赞的菜品序号");
                    int praiseNo=input.nextInt();
                    while (praiseNo<1||praiseNo>dishNames.length){
                        System.out.println("本店没有这个菜品，无法点赞，请重新输入序号");
                        praiseNo=input.nextInt();
                    }
                    //把哪个位置的菜品点赞数加1
                    praiseNums[praiseNo-1]++;

                    break;
                case 6:
                    //退出系统
                    flag = true;
                    break;

                default:
                    //退出系统
                    flag = true;
                    break;
            }
            if (!flag) {//代表不退出
                System.out.print("请输入0返回");
                num = input.nextInt();
            } else {
                break;
            }
        } while (num == 0);
        System.out.println("谢谢使用，欢迎下次光临");
    }
}
